package com.threeox.commonlibrary.ui.view.inter.engine.multipage;

import android.content.Context;

import com.threeox.commonlibrary.entity.engine.model.multipage.DynamicPageDataMessage;
import com.threeox.commonlibrary.entity.engine.request.base.BaseRequestMsg;
import com.threeox.commonlibrary.ui.view.engineview.multipagemodel.MultiPageModelView;
import com.threeox.commonlibrary.ui.view.inter.IPageDataView;
import com.threeox.commonlibrary.ui.view.inter.engine.base.IBaseExtend;

import java.util.List;

/**
 *
 * @ClassName: IMultiPageExtend
 *
 * @Description: TODO(多页面模型的扩展类)
 *
 * @author 赵屈犇
 *
 * @date 创建时间: 2017/8/10 14:22
 *
 * @version 1.0
 *
 */
public interface IMultiPageExtend<T> extends IBaseExtend {

    /**
     * 初始化
     *
     * @param context
     * @param multiPageModelView
     */
    void init(Context context, MultiPageModelView multiPageModelView);


    /**
     * 在设置布局Id 之前拦截调用 返回的Integer 值为你想修改的LayoutId 为null是不修改LayoutId
     *
     * @param layoutId
     * @param data
     * @param pageDataView
     * @return
     */
    Integer onBeforeSetLayout(Integer layoutId, T data, DynamicPageDataMessage pageDataView);

    /**
     * 在设置布局Id 之后调用 一般用于数据的设置
     *
     * @param layoutId
     * @param data
     * @param pageDataView
     * @param position
     */
    void onAfterSetLayout(Integer layoutId, T data, IPageDataView pageDataView, int position);

    /**
     * 切换Fragment
     *
     * @param position
     */
    void switchoverFragment(int position);

    /**
     * 在请求成功之前，没有解析和注入数据之前调用
     *
     * @param requestMsg
     * @param url
     * @param id
     * @param msg
     * @param data
     * @return  true 就是不拦截,false 就是拦截
     */
    boolean onBeforeRequestSuccess(BaseRequestMsg requestMsg, String url, int id, String msg, List<T> data);

    /**
     * 在请求数据成功之后，解析和注入数据之后调用
     *
     * @param requestMsg
     * @param url
     * @param id
     * @param msg
     * @param data
     */
    void onAfterRequestSuccess(BaseRequestMsg requestMsg, String url, int id, String msg, List<T> data);

    /*================ViewPager的滑动事件====================*/

    void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);

    void onPageSelected(int position);

    void onPageScrollStateChanged(int state);

    /*================ViewPager的滑动事件====================*/

}
